SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
/*
		PROCEDIMIENTO PARA EXTRAER INFORMACION SOBRE ACCOUNTING
*/
CREATE PROCEDURE [dbo].[spInfoRelation] 
@id int,
@tabla varchar(50),
@rel varchar(50)
AS
SET NOCOUNT ON
-- TODOS LOS PERMISOS DE UN USUARIO
IF (upper(@tabla) = 'TB_USUARIOS') and (upper(@rel) = 'TODOS')
	BEGIN		
	BEGIN TRANSACTION Todos

		/* ACCESO A TRAVES DE GRUPOS_ROLES */
	Select distinct tb_Permisos.idpermiso as id, tb_Permisos.permiso from tb_RelUsuarioGrupo, tb_Usuarios, tb_RelGruposRoles, 
	tb_RelPermisosRoles, tb_Permisos
	where
	tb_usuarios.idusuario = @id and
	tb_usuarios.idusuario = tb_RelUsuarioGrupo.idusuario and
	tb_RelGruposRoles.idGrupo = tb_RelUsuarioGrupo.idGrupo and
	tb_RelPermisosRoles.idRol = tb_RelGruposRoles.idRol and
	tb_Permisos.idPermiso = tb_RelPermisosRoles.idPermiso

	UNION
	/* ACCESO A TRAVES DE USUARIO_ROL */
	Select distinct tb_Permisos.idpermiso as id, tb_Permisos.permiso from tb_Usuarios, tb_RelUsuarioRol, 
	tb_RelPermisosRoles, tb_Permisos
	where
	tb_Usuarios.idusuario =@id and
	tb_Usuarios.idUsuario = tb_RelUsuarioRol.idUsuario and
	tb_RelUsuarioRol.idRol = tb_RelPermisosRoles.idRol and
	tb_Permisos.idPermiso = tb_RelPermisosRoles.idPermiso

	UNION
	/* ACCESO A TRAVES DE GRUPO_PERMISOS*/
	Select tb_Permisos.idpermiso as id, tb_Permisos.permiso from tb_Usuarios, tb_RelUsuarioGrupo, tb_RelGrupoPermisos,
	tb_Permisos
	Where
	tb_Usuarios.idusuario = @id and
	tb_Usuarios.idUsuario = tb_RelUsuarioGrupo.idUsuario and
	tb_RelUsuarioGrupo.idGrupo = tb_RelGrupoPermisos.idGrupo and
	tb_RelGrupoPermisos.idPermiso = tb_Permisos.idPermiso

	UNION
	/* ACCESO A TRAVES DE USUARIO_PERMISO */
	Select distinct tb_Permisos.idpermiso as id, tb_Permisos.permiso from tb_Usuarios, tb_RelUsuarioPermisos,
	tb_Permisos
	Where
	tb_Usuarios.idusuario = @id and
	tb_RelUsuarioPermisos.idUsuario = tb_Usuarios.idUsuario and
	tb_RelUsuarioPermisos.idPermiso = tb_Permisos.idPermiso

	if @@error = 0
		COMMIT TRANSACTION Todos
	else
		ROLLBACK TRANSACTION Todos
	END
	
IF (upper(@tabla) = 'TB_USUARIOS') and (upper(@rel) = 'TB_ROLES')
	begin
	BEGIN TRANSACTION
	Select tb_Roles.idRol as id, tb_Roles.descripcion as col from tb_Roles, tb_Usuarios, tb_RelUsuarioRol
	where tb_usuarios.idusuario = @id and
	tb_RelUsuarioRol.idusuario = tb_usuarios.idusuario and
	tb_RelUsuarioRol.idRol = tb_Roles.idRol 
	if @@ERROR = 0
		COMMIT TRANSACTION
	else
		ROLLBACK TRANSACTION
	end

IF (upper(@tabla) = 'TB_USUARIOS') and (upper(@rel) = 'TB_GRUPODEUSUARIOS')
	begin
	BEGIN TRANSACTION
	Select tb_Grupodeusuarios.idGrupo as id,tb_GrupodeUsuarios.grupo as col from tb_Grupodeusuarios, tb_Usuarios, tb_RelUsuarioGrupo
	where tb_usuarios.idusuario = @id and
	tb_RelUsuarioGrupo.idusuario = tb_usuarios.idusuario and
	tb_RelUsuarioGrupo.idGrupo = tb_Grupodeusuarios.idGrupo
	if @@ERROR = 0
		COMMIT TRANSACTION
	else
		ROLLBACK TRANSACTION
	end		

IF (upper(@tabla) = 'TB_USUARIOS') and (upper(@rel) = 'TB_PERMISOS')
	begin
	BEGIN TRANSACTION
	Select tb_Permisos.idpermiso as id, tb_Permisos.permiso as col from tb_Permisos, tb_Usuarios, tb_RelUsuarioPermisos
	where tb_usuarios.idusuario = @id and
	tb_RelUsuarioPermisos.idusuario = tb_usuarios.idusuario and
	tb_RelUsuarioPermisos.idPermiso = tb_Permisos.idPermiso
	if @@ERROR = 0
		COMMIT TRANSACTION
	else
		ROLLBACK TRANSACTION
	end		

-- PERMISOS QUE FORMAN PARTE DEL ROL
IF (upper(@tabla) = 'TB_ROLES') and (upper(@rel) = 'TB_PERMISOS')
	begin
	BEGIN TRANSACTION
	Select tb_permisos.idpermiso as id, tb_permisos.permiso as col from tb_Permisos, tb_RelPermisosRoles
	where tb_RelPermisosRoles.idRol = @id and
	tb_RelPermisosRoles.idpermiso = tb_Permisos.idPermiso
	if @@ERROR = 0
		COMMIT TRANSACTION
	else
		ROLLBACK TRANSACTION
	end

-- GRUPOS QUE PERTENECEN A ESE ROL
IF (upper(@tabla) = 'TB_ROLES') and (upper(@rel) = 'TB_GRUPODEUSUARIOS')
	begin
	BEGIN TRANSACTION
	Select tb_grupodeusuarios.idgrupo as id, tb_grupodeusuarios.grupo as col from tb_Grupodeusuarios, tb_RelGruposRoles
	where tb_RelGruposRoles.idRol = @id and
	tb_RelGruposRoles.idgrupo = tb_Grupodeusuarios.idGrupo
	if @@ERROR = 0
		COMMIT TRANSACTION
	else
		ROLLBACK TRANSACTION
	end

-- USUARIOS ASIGNADOS A ESE ROL
IF (upper(@tabla) = 'TB_ROLES') and (upper(@rel) = 'TB_USUARIOS')
	begin
	Select tb_usuarios.idusuario as id, tb_usuarios.usuario as col from tb_usuarios, tb_RelUsuarioRol
	where tb_relUsuarioRol.idRol = @id and
	tb_usuarios.idusuario = tb_RelUsuarioRol.idusuario
	end	

IF (upper(@tabla) = 'TB_GRUPODEUSUARIOS') and (upper(@rel) = 'TB_USUARIOS')
	begin
	Select tb_usuarios.idUsuario as id, tb_usuarios.usuario as col from tb_usuarios, tb_RelUsuarioGrupo
	where tb_relusuariogrupo.idgrupo = @id and
	tb_relUsuarioGrupo.idusuario = tb_usuarios.idusuario
	end

IF (upper(@tabla) = 'TB_GRUPODEUSUARIOS') and (upper(@rel) = 'TB_PERMISOS')
	begin
	Select tb_permisos.idpermiso as id, tb_permisos.permiso as col from tb_permisos, tb_RelGrupoPermisos
	where 
	tb_RelGrupoPermisos.idgrupo = @id and
	tb_relGrupoPermisos.idpermiso = tb_Permisos.idpermiso
	end

IF (upper(@tabla) = 'TB_GRUPODEUSUARIOS') and (upper(@rel) = 'TB_ROLES')
	begin
	Select tb_roles.idrol as id, tb_roles.descripcion as col from tb_roles, tb_RelGruposRoles
	where 
	tb_RelGruposRoles.idgrupo = @id and
	tb_relGruposRoles.idrol = tb_Roles.idrol
	end


IF (upper(@tabla) = 'TB_GRUPODECARRERAS') and (upper(@rel) = 'TB_CARRERAS')
	begin
	Select tb_Carreras.idCarrera as id, tb_carreras.descripcion as col from tb_carreras, tb_RelGrupoCarrera_Carrera
	where
	tb_RelGrupoCarrera_Carrera.idGrupoCarrera = @id and
	tb_Carreras.idCarrera = tb_RelGrupoCarrera_Carrera.idCarrera
	end	

IF (upper(@tabla) = 'TB_SUBORGANIZACIONES') and (upper(@rel) = 'TB_EDIFICIOS')
begin
	Select tb_Edificios.idEdificio as id, tb_Edificios.nombre as col from tb_Edificios, tb_RelEdificioOrg
	where		
	tb_RelEdificioOrg.IdSubOrganizacion = @id and
	tb_RelEdificioOrg.idEdificio = tb_Edificios.idEdificio
end

-- Todos los Espacios Curriculares de otro Espacio Curricular (Correlatividades)
IF (upper(@tabla) = 'TB_ESPACIOSCURRICULARES') and (upper(@rel) = 'TB_ESPACIOSCURRICULARES')
begin
	Select tb_Correlatividades.idEspacioCurricular2 as id, tb_EspaciosCurriculares.Descripcion as col 
	from tb_Espacioscurriculares, tb_Correlatividades
	where
	tb_Correlatividades.idEspacioCurricular = @id and
	tb_Correlatividades.idEspacioCurricular2 = tb_Espacioscurriculares.idEspacioCurricular
end	

-- Todas las asignaturas que tiene un espacio curricular
IF (upper(@tabla) = 'TB_ESPACIOSCURRICULARES') and (upper(@rel) = 'TB_ASIGNATURAS')
begin
	select tb_Asignaturas.idAsignatura as id, tb_Asignaturas.descripcion as col
	from tb_Asignaturas, tb_AsignaturasPosiblesEC
	where
	tb_AsignaturasPosiblesEC.idEspacioCurricular = @id and
	tb_Asignaturas.idAsignatura = tb_AsignaturasPosiblesEC.idAsignatura
end 

IF (upper(@tabla) = 'TB_SUBORGANIZACIONES') and (upper(@rel) = 'TB_PLANESESTUDIO')
begin
	Select tb_PlanesEstudio.idPlanEstudio as id, tb_PlanesEstudio.descripcion as col from tb_PlanesEstudio, tb_RelPlanesSubOrg
	where		
	tb_RelPlanesSubOrg.idSubOrganizacion = @id and
	tb_RelPlanesSubOrg.idPlanEstudio = tb_PlanesEstudio.idPlanEstudio
end

-- Todos los Espacios Curriculares de otro Espacio Curricular (Correlatividades)
IF (upper(@tabla) = 'TB_DIVISIONES') and (upper(@rel) = 'TB_DIVISIONES')
begin
	Select tb_RelDivisionGrupoSimples.idDivision as id, tb_Divisiones.Descripcion as col 
	from tb_Divisiones, tb_RelDivisionGrupoSimples
	where
	tb_RelDivisionGrupoSimples.idDivision = @id and
	tb_RelDivisionGrupoSimples.idDivision2 = tb_Divisiones.idDivision
end
GO
GRANT EXECUTE ON  [dbo].[spInfoRelation] TO [public]
GO
